 <?PHP
//require_once _DIRETORIO_INC_._SEPARADOR_DIRETORIO_.'header.php';
require_once _DIRETORIO_BACKEND_._SEPARADOR_DIRETORIO_.'db.php';
require_once _DIRETORIO_BACKEND_VO_._SEPARADOR_DIRETORIO_.'VOendereco.php';
require_once _DIRETORIO_BACKEND_DB_._SEPARADOR_DIRETORIO_.'Paginacao.php';
/**
* Esta Classe é responsável por inserir ou atualizar um registro de endereco.
* @name DBendereco
* @version 0.1
* @access public
* @package DB
**/
abstract Class DBendereco{
	/**
	 * Método responsável por retornar os dados. 
	 * @param int $idEndereco
	 * @access public
	 * @return oVO objeto do cep endereco
	 */
	public function getByID($idEndereco){
            $DB= new DB();
            $dbh = $DB->conec();
            $oVO = new VOendereco();

            try{

                $sql = "SELECT * FROM ENDERECO WHERE idEndereco =:idEndereco";

                $stmt = $dbh->prepare($sql);
                $stmt->bindParam (':idEndereco',$idEndereco,PDO::PARAM_INT);

                $stmt->execute();

                $oVO = $stmt->fetch(PDO::FETCH_OBJ);

            } 
            catch(PDOException $e){
                $DB->DBerror($e,$sql);
            }

            return $oVO;
	}
	/**
	 * Método responsável por montar um Sql de busca. 
	 * @param objeto $oVO 
	 * @param $pag 
	 * @access public
	 * @return resultado da Busca.
	 */
	public function get($oVO,$pag,$limitePagina){	
		$DB = new DB();
		$dbh = $DB->conec();		
	  	if(!isset($first)){$first = false;}
	  	try{
                    $sql = "SELECT * FROM ENDERECO WHERE idEmpresa= :idEmpresa";                    
                    if(!empty($oVO->cep)){
                           $sql.=$this->getSQLFirst($first)."cep =:cep" ;
                    }
                    if(!empty($oVO->logradouro)){
                           $sql.=$this->getSQLFirst($first)."logradouro like :logradouro" ;
                    }
                    if(!empty($oVO->numero)){
                           $sql.=$this->getSQLFirst($first)."numero =:numero" ;
                    }
                    if(!empty($oVO->municipio)){
                           $sql.=$this->getSQLFirst($first)."municipio like :municipio" ;
                    }
                    if(!empty($oVO->bairro)){
                           $sql.=$this->getSQLFirst($first)."bairro like :bairro" ;
                    }
                    if(!empty($oVO->complemento)){
                           $sql.=$this->getSQLFirst($first)."complemento like :complemento" ;
                    }
                    $sql.=" order by logradouro";

                    if(isset($pag)){
                           $pg1 = ($limitePagina*($pag-1));
                           $sql.=" limit ".$pg1." , ".$limitePagina;
                    }

                    $stmt = $dbh->prepare($sql);
                    $stmt->bindParam(':idEmpresa',$oVO->idEmpresa,PDO::PARAM_INT);

                    if(!empty($oVO->cep)){
                           $oVO->cep = "%".$oVO->cep."%";
                           $stmt->bindParam(':cep',$oVO->cep,PDO::PARAM_STR);
                    }
                    if(!empty($oVO->logradouro)){   
                           $oVO->logradouro = "%".$oVO->logradouro."%";
                           $stmt->bindParam(':logradouro',$oVO->logradouro,PDO::PARAM_STR);
                    }                    
                    $stmt->bindParam(':numero',$oVO->numero,PDO::PARAM_INT);                    
                    if(!empty($oVO->municipio)){   
                           $oVO->municipio = "%".$oVO->municipio."%";
                           $stmt->bindParam(':municipio',$oVO->municipio,PDO::PARAM_STR);
                    }
                    if(!empty($oVO->bairro)){   
                           $oVO->bairro = "%".$oVO->bairro."%";
                           $stmt->bindParam(':bairro',$oVO->bairro,PDO::PARAM_STR);
                    }                    
                    if(!empty($oVO->complemento)){   
                           $oVO->complemento = "%".$oVO->complemento."%";
                           $stmt->bindParam(':complemento',$oVO->complemento,PDO::PARAM_STR);
                    }	  	  	 
                    $stmt->execute();
                    $result = $stmt->fetchAll(PDO::FETCH_CLASS,"VOendereco");
	  	}
		catch (PDOException $e){
			 $DB->DBerror($e, $sql);
		}
		return $result;
	}
	
  	/**
	 * Método responsável por adicionar à string do SQl a clausula WHERE ou AND. 
	 * @param boolean $first 
	 * @access public
	 * @return Where ou AND.
	 */
	public function getSqlFirst(&$first){
	    $return = " AND ";
	    if($first){$return=" WHERE ";$first=true;}
	    return($return);
	}
	
   	/**
	 * Método responsável por inserir ou atulizar um registro. 
	 * @param objeto $oVO 
	 * @access public
	 */	
	public function save($oVO){	
            $DB = new DB();
            $dbh = $DB->conec();
            if($oVO->idEndereco > 0){
                $sql = "UPDATE ENDERECO SET 
                               numero =:numero
                               ,logradouro =:logradouro
                               ,municipio =:municipio
                               ,cep =:cep
                               ,bairro =:bairro
                               ,idEmpresa = :idEmpresa
                               ,complemento =:complemento
                         WHERE idEndereco =:idEndereco" ;

                $stmt = $dbh->prepare($sql);
                $stmt->bindParam(':idEndereco',$oVO->idEndereco,PDO::PARAM_INT);

            } else {

                $sql = "INSERT INTO ENDERECO 
                                   (cep
                                   ,logradouro
                                   ,numero
                                   ,municipio
                                   ,bairro
                                   ,complemento
                                   ,idEmpresa)
                             VALUES
                                   (:cep
                                   ,:logradouro
                                   ,:numero
                                   ,:municipio
                                   ,:bairro
                                   ,:complemento
                                   ,:idEmpresa)";         
                    $stmt = $dbh->prepare($sql);

            }
            
            $stmt->bindParam(':cep',mb_convert_encoding($oVO->cep, "ISO-8859-1", "UTF-8"),PDO::PARAM_STR);
            $stmt->bindParam(':logradouro',mb_convert_encoding($oVO->logradouro, "ISO-8859-1", "UTF-8"),PDO::PARAM_STR);
            $stmt->bindParam(':numero',$oVO->numero,PDO::PARAM_INT);
            $stmt->bindParam(':municipio',mb_convert_encoding($oVO->municipio, "ISO-8859-1", "UTF-8"),PDO::PARAM_STR);            
            $stmt->bindParam(':bairro',mb_convert_encoding($oVO->bairro, "ISO-8859-1", "UTF-8"),PDO::PARAM_STR);
            $stmt->bindParam(':complemento',mb_convert_encoding($oVO->complemento, "ISO-8859-1", "UTF-8"),PDO::PARAM_STR);
            $stmt->bindParam(':idEmpresa',$oVO->idEmpresa,PDO::PARAM_INT);
            $stmt->execute();
            
            if($oVO->idEndereco == 0){
                $sql = "SELECT LAST_INSERT_ID()";
                $stmt = $dbh->prepare($sql);
                $stmt->execute();
                $lastId = $stmt->fetchColumn();
                return $lastId;
            }
            return $oVO->idEndereco;
            
	}
		
	/**
	 * Método responsável por deletar um registro. 
	 * @param int $idEndereco
	 * @access public
	 */
	public function delete($idEndereco){			
            $DB = new DB();
            $dbh = $DB->conec();
            $sql = "DELETE FROM ENDERECO WHERE idEndereco =:idEndereco";
            $stmt = $dbh->prepare($sql);
            $stmt->bindParam(':idEndereco',$idEndereco,PDO::PARAM_INT);
            $stmt->execute();		
	}

}
